perm filename BMM[XX,LCS] blob sn#197685 filedate 1976-01-19 generic text, type T, neo UTF8
00100	C**** BMSTF, BMS, METER, RNOTE, MAKNUM, IABS, DRWNT, RHORZ, RDRAW
00300		SUBROUTINE BMSTF
00400		IMPLICIT INTEGER(A-Q,S-Z)
00500		REAL DIS,DISX,HGT,POS,CENTR,STFF,HGT1
00600		COMMON/STF/RSTFAC(-3/4),RSTJ2/MIN/MINI,RMINI
00700		COMMON R2,JA,CENTR,J2,RJQ(20),JQ(20)/BM/RA,RC,RJY
00800		COMMON/POSI/STFF(-3/4),JJ2,POS/PLTR/PLT,RHT,DIS
00900		COMMON/ALF/QQ(3),RST7,RST18,R3Q,JY,RD,RX,RW,RJX,RJ,L,K,
01000		1 RJA,YY,DISX,HGT,RZ,INP(53)
01100		COMMON/DAT/RACNT(65),RDOT(17),XAC(7),RNOTE(22),RACCI(22),NACCI(3)
01200		EQUIVALENCE (J3,JQ(1)),(J4,JQ(2)),(J5,JQ(3)),(R5,RJQ(3))
01300		1,(R6,RJQ(4)),(J7,JQ(5)),(J8,JQ(6)),(J9,JQ(7)),(J10,JQ(8))
01400		1,(J11,JQ(9)),(J6,JQ(4)),(R9,RJQ(7)),(R8,RJQ(6)),(R3,RJQ(1))
01500		1 ,(R7,RJQ(5)),(R4,RJQ(2)),(R9,RJQ(7)),(R10,RJQ(8)),(RX3,RJQ(20))
01600		DATA R14/14.54/,RTF/3.0/,RHGT/48.0/,R2HGT/96.0/,RBM/.83/
01700		1,RDBR/ 3.5/,RBR/.33/,RBX/ 7.0/
01800	C  RDBR IS SPACER FOR DBL BAR.
01900	C  RTF COMPENSATES FOR BAD PLANNING.
02000		RST7=RSTJ2*7.
02100		RST18=RSTJ2*18.
02200	C  TO COMPENSATE FOR NOTE #3 COMING AT POS=0
02300	
02400		R3Q=R3
02700		IF(JA.EQ.8)GO TO 100
02800	C  GO TO STAVES.
37900	
38200	C  NEXT IS FOR BEAMS
38300		RMINI=RSTJ2
38400		RX=2.7*RSTJ2*5.96
38500	C******************************
38600		R6=RHORZ(R6)
38700		IF(R8.NE.0)GO TO 204
38800		IF(R10.GE.10)GO TO 204
38900		IF(J7)GO TO 204
39000		IF(R9.NE.0)GO TO 1
39100	C  R8=0 AND R9=NUM  -- PUTS NUMBER OUTSIDE BEAM(FOR TRIPLETS, ETC.)
39200	204	IF(R9.NE.0)R9=RHORZ(R9)
39300		IF(J7)GO TO 201
39400	200	IF(J10.LT.10)GO TO 91
39500	C NEXT FOR INNER, PARTIAL BEAMS
39600		R8=RHORZ(R8)
39700		R10=AMOD(R10,10.)
39800		GO TO(2,3,4),J10/10
39900	2	RH=R9+RX
40000		GO TO 1
40100	3	R8=R9-RX
40200	C 10=SHORT PARTIAL LFT→RT., 20=RT.←LFT, 30=TO POS IN P8
40300	4	RH=R8
40400	C  LEFT INNER POS.
40500		GO TO 1
40600	201	J7=-J7
40700	C P8=WIDTH OF TREM. P9=0(SANS OTHER BEAMS) OR =POS.3, P10=DISP.
40800		CALL NOZERO(R10)
40900	C  ALWAYS AT LEAST 1 IN DISPLACEMENT
41000		J10=30
41100	C TO ACTIVATE PARTIAL BEAM SECTION
41200		IF(J9.NE.0)GO TO 202
41300	C  NEXT FOR TREM. WITHOUT OTHER BEAMS.
41400		RH=-1
41500		IF(J7.GE.20)RH=-RH
41600	CC203	R4=R4+R10*RH
41700	CC	CALL CENTX
41800		R5=R4+RH
41900		R9=R3
42000		R6=R3+22.*RMINI
42100	202	IF(R8.EQ.0)R8=4. 
42200		RX=R8*RMINI*2.98
42300		RH=R9+RX
42400		R9=R9-RX
42500		GO TO 1
42600	
42700	91	IF(J8.EQ.0)GO TO 1
42800		IF(J8.GT.0)GO TO 92
42900	C FOR J8=-(10+DN) OR -(20+DN)
43000		R9=R3+RX
43100		IF(J8.LE.-20)R9=R6-RX
43200	192	J8=-J8
43300	92	IF(J10.EQ.0)J10=MOD(J8,10)
43400	CC??? 4/75	J8=J8-J10
43500		IF(J10.EQ.0)J10=1
43600		R10=J10
43700	C IF P8 NEG, P9 IS AUTOMATIC, ALSO P10 IF NEEDED.
43800	1	IF(IABS(J4).LT.100)GO TO 97
43900		RMINI=.6*RSTJ2
44000		R5=AMOD(R5,100.0)
44100	C   SPACE BETWEEN BEAMS
44200	97	RJ=RMINI*11.
44300		RW=RMINI*RHGT
44400	C  DIST. UP OR DOWN FROM NOTE HEAD.
44500		RJA=R10*RJ
44600	C  DISPLACEMENT
44700		RD=R9
44800	C  POSITION 3
44900		RJX=CENTR-RW+RJA
45000	C  FINAL HEIGHT OF LEFT SIDE
45100	C  NEG R7=TREMOLO
45200		RX=MOD(J7,10)
45300		JJ2=J7-20
45400		RA=R6
45500	C  HORIZANTAL DIST.
45600		RJY=R5*RST7+POS-RST18-RW+RJA
45700	C   VERTICAL POS OF RIGHT SIDE.
45800		RW=R14*RMINI
45900		RY=1.
46000		IF(J7.GE.20)GO TO 98 
46100	C JUMP IF STEMS ARE DOWN
46200		RY=-RY
46300	C  FOR  THICKENING INCR.
46400		JJ2=J7-10
46500		RJ=-RJ
46600		RJA=RMINI*R2HGT-2.*RJA
46700		RJX=RJX+RJA
46800		RJY=RJY+RJA
46900		R3Q=R3Q+RW
47000	C  POSITION 1
47100		RA=RA+RW
47200	C  POSITION 2
47300		RD=RD+RW
47400	C******************************
47500		RH=RH+RW
47600	98	RSTJ2=RSTJ2*RBM
47700	C  RBM BRINGS LINES OF BEAMS CLOSER TOGETHER. (=.83)
47800	93	IF(JJ2.GT.RX)GO TO 94
47900		IF(J10.GE.10)GO TO 7
48000	C**********************
48100		IF(J8.EQ.0)GO TO 94
48200		R3=RW
48300		IF(J9.EQ.0)GO TO 292
48400	 	IF(J8.GE.20)GO TO 193
48500	293	RX=R3Q-RD
48600		GO TO 194
48700	7	RHX=RH-R3Q
48800		R3=RD-R3Q
48900		GO TO 292
49000	193	RX=RD-RA
49100	194	R3=ABS(RX)
49200	292	DISX=ABS(R3Q-RA)
49300		HGT=RJX-RJY
49400		IF(J10.GE.10)HGT1=HGT*RHX/DISX
49500	C**********************
49600		R3=R3/DISX
49700	195	HGT=HGT*R3
49800	196	L=J8/10
49900		J8=0
50000		IF(J10.GE.10)GO TO 8
50100	C***************
50200		IF(L.EQ.1)GO TO 95
50300	C   BEAM LFT=1,  RT=2   (PARAM 8=10 OR 20)
50400		R3Q=RD
50500		RJX=RJY+HGT
50600		GO TO 94
50700	C**************
50800	8	R3Q=RH
50900		RA=RD
51000		RJY=RJX-HGT
51100		RJX=RJX-HGT1
51200		GO TO 94
51300	95	RA=RD
51400		RJY=RJX-HGT
51500	94	L=7.*RMINI
51600	930	RC=0
51700	C  MINI LINES HAVE .2 SMALLER BEAMS.  MAYBE CHANGE THIS??
51800		CALL LINES(R3Q,RJX,3)
51900		DO 941 K=1,L
52000		CALL BMS
52100		IF(PLT.GE.0)GO TO 940
52200		RC=RC+RY
52300	C FOR THICKENING.
52400		CALL BMS
52500		CALL EXCH(RA,R3Q)
52600	941	CALL EXCH(RJY,RJX)
52700		CALL BMS
52800	C  DRAWS 5 LINES FOR BEAMS.
52900	940	JJ2=JJ2-1
53000		IF(JJ2.LE.0)GO TO 942
53100	C  IF P7=10 OR 20 ONE BEAM WILL APPEAR.
53200		RJY=RJY+RJ
53300		RJX=RJX+RJ
53400		GO TO 930
53500	
53600	942	IF(R8.NE.0)RETURN
53700		IF(R9.EQ.0)RETURN
53800		IF(R10.GE.30)RETURN
53900	C FOR NUMBERS OUTSIDE BEAMS
54000		RSTJ2=RMINI
54100		RD=-10.
54200		IF(R7.LT.20)RD=8.3
54300	943	J3=R3Q+(RA-R3Q)/2.
54400		R6=1.
54500	CC *** DONE IN CENTX ***	R4=AMOD(R4,100.)
54600		R4=R4+(R5-R4)/2.+RD
54700		R7=1
54800	C ITALICS
54900		CALL MAKNUM(R9)
55000		RETURN
55100	
55200	100	RA=0
55300	C  FOR STAFF LINES: 8, POS 1, HGT(3 TO -3), UP-DOWN(NT #S), 
55400	C  P5=SIZE, P6=2ND POS., P7=(1=INVIS.), P8=SPACER, P9=INST. NAME
55500	C  P6=SIZE FACTOR, IF P7≠0 STAFF IS INVIS. 
55600	C  PLT =-2 MAKES HEAVY STAFF.(FOR XGP)
55700		IF(R5.EQ.0)R5=RSTFAC(J2)
55800		CALL NOZERO(R5)
55900		RSTFAC(J2)=R5
56000		RX=(J2+3)*123-369.+R4*7.*R5
56100	CC	RC=R5
56200		STFF(J2)=RX
56300		RX=RX+RTF*R5
56400	C  FOR RTF SEE DATA
56500		RA=RX
56600	C  FOR 2 PASS PLOTTING
56700		RJ=RHORZ(R6)
56800		IF(R6.EQ.0)RJ=596
56900		R5=R5*14.
57000		IF(R8.EQ.0)GO TO 68
57100		IF(PLT)GO TO 68
57200		RZ=RX+R8*167.
57300	C  167 IS A MAGIC NUMBER!!  PUTS LINE ON DPY.
57400		CALL LINX(R3,RZ,RJ,RZ)
57500	C  SHOWS WHERE NEXT STAFF 0 WILL BE.
57600	68	IF(J7.EQ.0)GO TO 101
57700		IF(PLT.EQ.0)CALL LINES(-596.,RX,3)
57800	C  TO ACTIVATE DPY BUFFER
57900		RETURN
58000	101	DO 6 K=1,5
58100		RZ=RJ
58200		RW=R3
58300		IF(K.EQ.2)GO TO 66
58400		IF(K.NE.4)GO TO 67
58500	66	CALL EXCH(RW,RZ)
58600	67	CALL LINX(RZ,RX,RW,RX)
58700	6	RX=RX+R5
58800		IF(RA.EQ.1000)RETURN
58900		IF(PLT.NE.-2)RETURN
59000		RX=RA-1./RHT
59100	CC	R5=RC
59200		RA=1000
59300		GO TO 101
59400		END
59500	
59600	CC	SUBROUTINE BMS
59700	CC	COMMON/STF/RSTFAC(-3/4),RSTJ2/BM/RA,RC,RJY
59800	CC	CALL LINES(RA,RJY+RC*RSTJ2,2)
59900	CC	END
60000	
60100		SUBROUTINE METER
60200	      COMMON R2,JA,CENTR,J2,RJQ(20),J3,JQ(19)/STF/RSTFAC(-3/4),RSTJ2
60300		COMMON/POSI/STFF(-3/4),JJ2,POS
60400		EQUIVALENCE (R4,RJQ(2)),(R7,RJQ(5)),(R6,RJQ(4)),(R5,RJQ(3))
60500		1,(R8,RJQ(6)),(RX3,RJQ(20)),(J10,JQ(7)),(J7,JQ(5)),(R9,RJQ(7))
60600	
60700	C  PARAMS  18 / STF / POS / VERT HGT./ TOP NUM/ BOT NUM/ SIZE FAC.
60800	
60900		CALL NOZERO(R7)
61000		JZ=J3
61100		RY=R4+8.*R7
61200	C  HEIGHT
61300		RW=R6
61400	C  BOTTOM NUM
61500	C  P5=TOP NUM
61600		R6=R7
61700		RR6=R6
61800	C  SIZE
61900	C  FOR BDR40  -- OR =1
62000		M=0
62100		R4=RY
62200	2	R7=0
62300	C  R7=0 FOR BDR FONT??
62400	CC	IF(R5.NE.99)GO TO 1
62500		IF(R5.LT.90)GO TO 3
62600	C  99 AS METER = 'C'  98=ALLA BREVE (CUT TIME)
62700		M=-1
62800		IF(R5.NE.98)GO TO 4
62900	C NEXT FOR LINE THROUGH C.
63000		RZ=R6
63100		RY=R4
63200		RA=POS
63300		R6=RX3
63400	C  TO LINE UP WITH R3
63500		J10=2
63600	C  FOR THICK LINE
63700		R4=4.2
63800		R5=9.8
63900		J7=0
64000		R8=0
64100		CALL ITMSUB
64200		POS=RA
64300		R4=RY
64400		R6=RZ
64500	C GET BACK THE RIGHT PARAMS.
64600	
64700	4	R5=9999.
64800		GO TO 3
64900	C  TO CENTER 12S AND 16S
65000	3	CALL MAKNUM(R5)
65100		IF(M)RETURN
65200	C  STICK AROUND FOR BOTTOM NUM
65300		M=-1
65400		R4=RY-4.*RR6
65500		R6=RR6
65600		R5=RW
65700	C  GET BOTTOM NUM
65800		J3=JZ
65900		R8=0
66000		GO TO 2
66100		END
66200	
66300	CF	SUBROUTINE RNOTE(X)
66400	CF	COMMON /PTR/PWDS(250),ITEM,L,I,IX/XRN/RN(4000)
66500	CF	X=RN(IFIX(PWDS(IFIX(AMOD(X,1000.))))+2)
66600	CF	END
66700	
66800		SUBROUTINE MAKNUM(RNUM)
66900		COMMON R2,JA,CENTR,J2,RJQ(20),JQ(20)/STF/RSTFAC(-3/4),RSTJ2
67000		EQUIVALENCE (J3,JQ(1)),(R4,RJQ(2)),(R8,RJQ(6)),(R7,RJQ(5))
67100	     1,(R6,RJQ(4)),(R5,RJQ(3)),(R7,RJQ(5)),(JQ(15),B),(JQ(16),C)
67200		1 ,(J8,JQ(6)),(J10,JQ(8)),(R3,RJQ(1)),(J5,JQ(3)),(RJY,JQ(19))
67300		1 ,(J7,JQ(5)),(J6,JQ(4)),(R9,RJQ(7))
67400		DATA RS/10.0/,RBX/1.0/
67500		RB8=R8
67600		J3X=J3
67700	C P7=0=BDR40; =1=BDI40; =2=PRIM.
67800		CALL NOZERO(R6)
67900		R5=R6
68000	C  UPPER CASE - BDR40
68100		R6=48000000.0+(R7+50.)*10000.
68200		R7=99999999.0
68300	C  BLANKS
68400		R8=R7
68500		IF(RNUM.NE.9999.)GO TO 2
68600	C  NEXT FOR 'C'OMMON TIME
68700		RNUM=12.
68800	C  MAKES A 'C'
68900		R4=R4-2.2
69000	C  .2 FOR BAD POS. OF LETTERS
69100		GO TO 4
69200	
69300	2	ONE=0 
69400		RNUM=IFIX(RNUM)
69500	C  SO MISTAKES (i.e. 2.2) WON'T BREAK THE PROG.
69600		IF(RNUM.EQ.1.)ONE=3.
69700		IF(RNUM.GT.9.)GO TO 3
69800	C  JUMP FOR 2 OR 3 DIGIT NUMBER
69900	4	R6=R6+RNUM*100.+47.
70000	C  PUTS BLANK ON END (.47)
70100		GO TO 1
70200	
70300	3	RJY=10.
70400		IF(RNUM.GE.100.)RJY=100.
70500		B=IFIX(RNUM/RJY)
70600		C=AMOD(RNUM,RJY)
70700		IF(RNUM.LT.100)GO TO 7
70800		D=IFIX(C/10.)
70900		C=AMOD(C,10.)
71000		IF(C.EQ.1.)ONE=ONE+3.
71100		R7=C*1000000.+999999.0
71200		C=D
71300	7	R6=R6+B*100.+C
71400		IF(B.EQ.1.)ONE=ONE+3.
71500		IF(C.EQ.1.)ONE=ONE+3.
71600		B=R5
71700		IF(RNUM.GE.100.)B=B*2
71800		J3=J3-RS*RSTJ2*B
71900	C  FOR 2 DIGIT NUMBER
72000	CCC	IF(RNUM.GE.20.)GO TO 6
72100	CCC	IF(JA.EQ.18)GO TO 6
72200	CCC	RJY=5.6
72300	CCC	IF(RNUM.GT.11.)RJY=3.
72400	C  ADJUSTS FOR 11, ETC.
72500	CCC	J2=J2+RJY*R5*RSTJ2
72600	CC6	J3=J2
72700	1	J3=J3+ONE*R5*RSTJ2
72800	C CENTERS THE NUMBER '1'
72900		CALL ALPHA
73000		J3=J3X
73100		IF(RB8.EQ.0)RETURN
73200	C NEXT FOR CIRCLES AND BOXES AROUND NUMBERS.
73300		R3=J3-R5
73400		IF(J10.EQ.0)J10=1
73500	C  USE J10 FOR EVEN THICKER BOX AND CIRC.
73600		IF(RNUM.GT.9)R3=R3+R5*RBX
73700	C  TO SET CENTER
73800		IF(RB8.EQ.2)GO TO 5
73900		R4=R4+R5+.1+.05/R5
74000	C  END OF ABOVE IS FOR SMALL CIRCLES.
74100		B=4.5
74200		IF(RNUM.GE.100.)B=5.5
74300		R5=R5*B
74400		JA=12
74500		J6=0
74600		J7=0
74700		J8=J10
74800		CALL CENTX
74900		CALL SLUR
75000		RETURN
75100	
75200	5	JA=4
75300		B=6
75400		R9=0
75500		IF(RNUM.LT.100.)GO TO 8
75600		B=9.
75700		R9=R5*6.
75800	C  MAKES RECTANGLE IF ≥100
75900	8	R4=R4+R5*.7+.1
76000		R8=R5*B
76100		J5=50
76200		CALL ITMSUB
76300	C  RETURNS ORIG. HORIZ. POS.
76400		END
76500	C  MAKES ONLY 1 TO 3 DIGIT NUMS NOW.  EXPAND LATER.
76600	
76700	CC	FUNCTION IABS(N)
76800	C  BECAUSE IABS IN LIB40 HAS A BUG.
76900	CC	IABS=N
77000	CC	IF(N)IABS=-N
77100	CC	END
77200	
77300	CF	SUBROUTINE DRWNT(RMINI)
77400	CF	COMMON /STF/RSTFAC(-3/4),RSTJ2
77500	CF	COMMON R2,JA,CENTR,J2,RJQ(20),JQ(20)
77600	CF	EQUIVALENCE (JE,JQ(3)),(RJD,RJQ(2)),(R6,RJQ(4)),
77700	CF	1 (JG,JQ(5)),(R7,RJQ(5)),(RJE,RJQ(3)),(RJZ,RJQ(20))
77800	CF	1 ,(JI,JQ(7)),(R9,RJQ(7)),(JH,JQ(6))
77900	CF	RJX=CENTR
78000	CF	JH=0
78100	C  JH=0 SO IT WILL FILL. (P8 IN 'CLEFS')
78200	CC	CENTR=CENTR-21.*RSTJ2
78300	CF	RA=R6
78400	CF	R6=.5*RMINI/RSTJ2
78500	CF	R7=R6
78600	CF	RJD=RJZ-3
78700	CCXX	IF(RSTJ2.NE.RMINI)RJD=RJZ+.43*(RJZ-3.)-.3
78800	C  ADJUSTS POSITION FOR MINI ACCIDENTALS (..??!!)
78900	CF	JI=0
79000	CF	CALL CLEFS
79100	CF	JI=R9
79200	C  ↑↑↑↑↑↑ NEEDED??
79300	C  FIX THIS???? ↑↑↑↑↑
79400	C  FOR WHITE NOTES AND ACCIS ON PLOTTER.
79500	CF	CENTR=RJX
79600	CF	R6=RA
79700	CF	R7=JG
79800	CF	JE=RJE
79900	CF	END
80000	
80100	CC	FUNCTION RHORZ(R)
80200	CC	RHORZ=R*5.96-596.
80300	CC	END
80400	
80500	CF	SUBROUTINE RDRAW(I,S,XY,X,R3,CENTR,RMINI)
80600	C   TO X,Y INTO ONE WORD
80700	CF	DIMENSION XY(1)
80800	CF	DO 2 K=I,IFIX(S)
80900	CF	L=2
81000	CF	Y=XY(K)
81100	CF	IF(Y.LT.1000.)GO TO 3
81200	CF	L=3
81300	CF	Y=Y-1000.
81400	C   >1000 = INVIS. LINE
81500	CF3	M=Y
81600	CF	Y=(Y-M)*1000.
81700	CF	IF(Y.GT.100.)Y=100-Y
81800	C   Y NUMBERS .GT.100 ARE NEG.
81900	CF	B=Y*X+CENTR
82000	CF	IF(M.GT.60)M=100-M
82100	CF	A=M*RMINI+R3
82200	CF2	CALL LINES(A,B,L)
82300	CF	END
82400		
82500	CC	FUNCTION EEXP(X,Y)
82600	CC	EEXP=X**Y
82700	CC	END